home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 2 / AACD 2.iso / AACD / Magazine / GraphicsCards / StormMesa / src-glu / project.s < prev    next >
Text File  |  1998-12-15  |  26KB  |  1,428 lines

  1.  
  2. ; Storm C Compiler
  3. ; Work2:Mesa3/Mesa-3.0/src-glu/project.c
  4.     mc68030
  5.     mc68881
  6.     XREF    _fabs__r
  7.     XREF    _memcpy
  8.     XREF    _std__in
  9.     XREF    _std__out
  10.     XREF    _std__err
  11.  
  12.     SECTION "_transform_point:0",CODE
  13.  
  14.  
  15. ;static void transform_point( GLdouble out[4], const GLdouble m[16],
  16. _transform_point
  17.     movem.l    a2/a3,-(a7)
  18.     fmovem.x fp2,-(a7)
  19.     move.l    $20(a7),a0
  20.     move.l    $1C(a7),a1
  21.     move.l    $18(a7),a2
  22. L24
  23. ;   out[0] = M(0,0) * in[0] + M(0,1) * in[1] + M(0,2) * in[2] + M(
  24.     fmove.d    (a1),fp0
  25.     fmul.d    (a0),fp0
  26.     moveq    #$20,d0
  27.     add.l    a1,d0
  28.     move.l    d0,a3
  29.     fmove.d    (a3),fp1
  30.     moveq    #$8,d0
  31.     add.l    a0,d0
  32.     move.l    d0,a3
  33.     fmul.d    (a3),fp1
  34.     fadd.x    fp1,fp0
  35.     moveq    #$40,d0
  36.     add.l    a1,d0
  37.     move.l    d0,a3
  38.     fmove.d    (a3),fp1
  39.     moveq    #$10,d0
  40.     add.l    a0,d0
  41.     move.l    d0,a3
  42.     fmul.d    (a3),fp1
  43.     fadd.x    fp1,fp0
  44.     moveq    #$60,d0
  45.     add.l    a1,d0
  46.     move.l    d0,a3
  47.     fmove.d    (a3),fp1
  48.     moveq    #$18,d0
  49.     add.l    a0,d0
  50.     move.l    d0,a3
  51.     fmul.d    (a3),fp1
  52.     fadd.x    fp1,fp0
  53.     fmove.d    fp0,(a2)
  54. ;   out[1] = M(1,0) * in[0] + M(1,1) * in[1] + M(1,2) * in[2] + M(
  55.     moveq    #$8,d0
  56.     add.l    a1,d0
  57.     move.l    d0,a3
  58.     fmove.d    (a3),fp0
  59.     fmul.d    (a0),fp0
  60.     moveq    #$28,d0
  61.     add.l    a1,d0
  62.     move.l    d0,a3
  63.     fmove.d    (a3),fp1
  64.     moveq    #$8,d0
  65.     add.l    a0,d0
  66.     move.l    d0,a3
  67.     fmul.d    (a3),fp1
  68.     fadd.x    fp1,fp0
  69.     moveq    #$48,d0
  70.     add.l    a1,d0
  71.     move.l    d0,a3
  72.     fmove.d    (a3),fp1
  73.     moveq    #$10,d0
  74.     add.l    a0,d0
  75.     move.l    d0,a3
  76.     fmul.d    (a3),fp1
  77.     fadd.x    fp1,fp0
  78.     moveq    #$68,d0
  79.     add.l    a1,d0
  80.     move.l    d0,a3
  81.     fmove.d    (a3),fp1
  82.     moveq    #$18,d0
  83.     add.l    a0,d0
  84.     move.l    d0,a3
  85.     fmul.d    (a3),fp1
  86.     fadd.x    fp1,fp0
  87.     moveq    #$8,d0
  88.     add.l    a2,d0
  89.     move.l    d0,a3
  90.     fmove.d    fp0,(a3)
  91. ;   out[2] = M(2,0) * in[0] + M(2,1) * in[1] + M(2,2) * in[2] + M(
  92.     moveq    #$10,d0
  93.     add.l    a1,d0
  94.     move.l    d0,a3
  95.     fmove.d    (a3),fp0
  96.     fmul.d    (a0),fp0
  97.     moveq    #$30,d0
  98.     add.l    a1,d0
  99.     move.l    d0,a3
  100.     fmove.d    (a3),fp1
  101.     moveq    #$8,d0
  102.     add.l    a0,d0
  103.     move.l    d0,a3
  104.     fmul.d    (a3),fp1
  105.     fadd.x    fp1,fp0
  106.     moveq    #$50,d0
  107.     add.l    a1,d0
  108.     move.l    d0,a3
  109.     fmove.d    (a3),fp1
  110.     moveq    #$10,d0
  111.     add.l    a0,d0
  112.     move.l    d0,a3
  113.     fmul.d    (a3),fp1
  114.     fadd.x    fp1,fp0
  115.     moveq    #$70,d0
  116.     add.l    a1,d0
  117.     move.l    d0,a3
  118.     fmove.d    (a3),fp1
  119.     moveq    #$18,d0
  120.     add.l    a0,d0
  121.     move.l    d0,a3
  122.     fmul.d    (a3),fp1
  123.     fadd.x    fp1,fp0
  124.     moveq    #$10,d0
  125.     add.l    a2,d0
  126.     move.l    d0,a3
  127.     fmove.d    fp0,(a3)
  128. ;   out[3] = M(3,0) * in[0] + M(3,1) * in[1] + M(3,2) * in[2] + M(
  129.     moveq    #$18,d0
  130.     add.l    a1,d0
  131.     move.l    d0,a3
  132.     fmove.d    (a3),fp0
  133.     fmul.d    (a0),fp0
  134.     moveq    #$38,d0
  135.     add.l    a1,d0
  136.     move.l    d0,a3
  137.     fmove.d    (a3),fp1
  138.     moveq    #$8,d0
  139.     add.l    a0,d0
  140.     move.l    d0,a3
  141.     fmul.d    (a3),fp1
  142.     fadd.x    fp1,fp0
  143.     moveq    #$58,d0
  144.     add.l    a1,d0
  145.     move.l    d0,a3
  146.     fmove.d    (a3),fp1
  147.     moveq    #$10,d0
  148.     add.l    a0,d0
  149.     move.l    d0,a3
  150.     fmul.d    (a3),fp1
  151.     fadd.x    fp1,fp0
  152.     fmove.d    $78(a1),fp1
  153.     fmul.d    $18(a0),fp1
  154.     fadd.x    fp1,fp0
  155.     fmove.d    fp0,$18(a2)
  156.     fmovem.x (a7)+,fp2
  157.     movem.l    (a7)+,a2/a3
  158.     rts
  159.  
  160.     SECTION "_matmul:0",CODE
  161.  
  162.     rts
  163.  
  164. ;static void matmul( GLdouble *product, const GLdouble *a, const GLdo
  165. _matmul
  166. L29    EQU    -$84
  167.     link    a5,#L29
  168.     movem.l    a2/a3,-(a7)
  169.     fmovem.x fp2,-(a7)
  170.     move.l    $10(a5),a0
  171.     move.l    $C(a5),a1
  172.     move.l    $8(a5),a3
  173. L25
  174. ;   for (i = 0;
  175.     moveq    #0,d0
  176.     bra    L27
  177. L26
  178. ;    T(i, 0) = A(i, 0) * B(0, 0) + A(i, 1) * B(1, 0) + A(i, 2) * 
  179.     fmove.d    0(a1,d0.l*8),fp0
  180.     fmul.d    (a0),fp0
  181.     lea    $20(a1),a2
  182.     fmove.d    0(a2,d0.l*8),fp1
  183.     fmul.d    $8(a0),fp1
  184.     fadd.x    fp1,fp0
  185.     lea    $40(a1),a2
  186.     fmove.d    0(a2,d0.l*8),fp1
  187.     fmul.d    $10(a0),fp1
  188.     fadd.x    fp1,fp0
  189.     lea    $60(a1),a2
  190.     fmove.d    0(a2,d0.l*8),fp1
  191.     fmul.d    $18(a0),fp1
  192.     fadd.x    fp1,fp0
  193.     lea    -$80(a5),a2
  194.     fmove.d    fp0,0(a2,d0.l*8)
  195. ;    T(i, 1) = A(i, 0) * B(0, 1) + A(i, 1) * B(1, 1) + A(i, 2) * 
  196.     fmove.d    0(a1,d0.l*8),fp0
  197.     fmul.d    $20(a0),fp0
  198.     lea    $20(a1),a2
  199.     fmove.d    0(a2,d0.l*8),fp1
  200.     fmul.d    $28(a0),fp1
  201.     fadd.x    fp1,fp0
  202.     lea    $40(a1),a2
  203.     fmove.d    0(a2,d0.l*8),fp1
  204.     fmul.d    $30(a0),fp1
  205.     fadd.x    fp1,fp0
  206.     lea    $60(a1),a2
  207.     fmove.d    0(a2,d0.l*8),fp1
  208.     fmul.d    $38(a0),fp1
  209.     fadd.x    fp1,fp0
  210.     lea    -$80(a5),a2
  211.     lea    $20(a2),a2
  212.     fmove.d    fp0,0(a2,d0.l*8)
  213. ;    T(i, 2) = A(i, 0) * B(0, 2) + A(i, 1) * B(1, 2) + A(i, 2) * 
  214.     fmove.d    0(a1,d0.l*8),fp0
  215.     fmul.d    $40(a0),fp0
  216.     lea    $20(a1),a2
  217.     fmove.d    0(a2,d0.l*8),fp1
  218.     fmul.d    $48(a0),fp1
  219.     fadd.x    fp1,fp0
  220.     lea    $40(a1),a2
  221.     fmove.d    0(a2,d0.l*8),fp1
  222.     fmul.d    $50(a0),fp1
  223.     fadd.x    fp1,fp0
  224.     lea    $60(a1),a2
  225.     fmove.d    0(a2,d0.l*8),fp1
  226.     fmul.d    $58(a0),fp1
  227.     fadd.x    fp1,fp0
  228.     lea    -$80(a5),a2
  229.     lea    $40(a2),a2
  230.     fmove.d    fp0,0(a2,d0.l*8)
  231. ;    T(i, 3) = A(i, 0) * B(0, 3) + A(i, 1) * B(1, 3) + A(i, 2) * 
  232.     fmove.d    0(a1,d0.l*8),fp0
  233.     fmul.d    $60(a0),fp0
  234.     lea    $20(a1),a2
  235.     fmove.d    0(a2,d0.l*8),fp1
  236.     fmul.d    $68(a0),fp1
  237.     fadd.x    fp1,fp0
  238.     lea    $40(a1),a2
  239.     fmove.d    0(a2,d0.l*8),fp1
  240.     fmul.d    $70(a0),fp1
  241.     fadd.x    fp1,fp0
  242.     lea    $60(a1),a2
  243.     fmove.d    0(a2,d0.l*8),fp1
  244.     fmul.d    $78(a0),fp1
  245.     fadd.x    fp1,fp0
  246.     lea    -$80(a5),a2
  247.     lea    $60(a2),a2
  248.     fmove.d    fp0,0(a2,d0.l*8)
  249.     addq.l    #1,d0
  250. L27
  251.     cmp.l    #4,d0
  252.     blt    L26
  253. L28
  254. ;   MEMCPY( product, te
  255.     pea    $80.w
  256.     pea    -$80(a5)
  257.     move.l    a3,-(a7)
  258.     jsr    _memcpy
  259.     add.w    #$C,a7
  260.     fmovem.x (a7)+,fp2
  261.     movem.l    (a7)+,a2/a3
  262.     unlk    a5
  263.     rts
  264.  
  265.     SECTION "_Identity:1",DATA
  266.  
  267. _Identity
  268.     dc.l    $3FF00000,0,0,0,0,0,0,0,0,0,$3FF00000,0
  269.     dc.l    0,0,0,0,0,0,0,0,$3FF00000,0,0,0
  270.     dc.l    0,0,0,0,0,0,$3FF00000,0
  271.  
  272.     SECTION "_invert_matrix:0",CODE
  273.  
  274.  
  275. ;static GLboolean invert_matrix( const GLdouble *m, GLdouble *out )
  276. _invert_matrix
  277. L68    EQU    -$150
  278.     link    a5,#L68
  279.     movem.l    a2-a4,-(a7)
  280.     fmovem.x fp2/fp3/fp4/fp5,-(a7)
  281.     move.l    $8(a5),a0
  282. L31
  283. ; r0 = wtmp[0], r1 = wtmp[1], r2 = wtmp[2], r3 = wtmp[3];
  284.     lea    -$100(a5),a1
  285.     move.l    a1,-$12C(a5)
  286.     lea    -$100(a5),a1
  287.     moveq    #$40,d0
  288.     add.l    a1,d0
  289.     move.l    d0,-$130(a5)
  290.     lea    -$100(a5),a1
  291.     lea    $80(a1),a2
  292.     lea    -$100(a5),a1
  293.     move.l    #$C0,d0
  294.     add.l    a1,d0
  295.     move.l    d0,a4
  296. ; r0[0] = MAT(m,0,0), r0[1] = MAT(m,0,1),
  297.     fmove.d    (a0),fp0
  298.     move.l    -$12C(a5),a1
  299.     fmove.d    fp0,(a1)
  300.     move.l    -$12C(a5),a3
  301.     move.l    $20(a0),$8(a3)
  302.     move.l    $24(a0),$C(a3)
  303.     move.l    -$12C(a5),a3
  304.     move.l    $40(a0),$10(a3)
  305.     move.l    $44(a0),$14(a3)
  306.     move.l    -$12C(a5),a3
  307.     move.l    $60(a0),$18(a3)
  308.     move.l    $64(a0),$1C(a3)
  309.     move.l    -$12C(a5),a3
  310.     move.l    #$3FF00000,$20(a3)
  311.     clr.l    $24(a3)
  312.     move.l    -$12C(a5),a3
  313.     clr.l    $38(a3)
  314.     clr.l    $3C(a3)
  315.     move.l    -$12C(a5),a3
  316.     clr.l    $30(a3)
  317.     clr.l    $34(a3)
  318.     move.l    -$12C(a5),a3
  319.     clr.l    $28(a3)
  320.     clr.l    $2C(a3)
  321.     move.l    -$130(a5),a1
  322.     move.l    $8(a0),(a1)
  323.     move.l    $C(a0),4(a1)
  324.     move.l    -$130(a5),a3
  325.     move.l    $28(a0),$8(a3)
  326.     move.l    $2C(a0),$C(a3)
  327.     move.l    -$130(a5),a3
  328.     move.l    $48(a0),$10(a3)
  329.     move.l    $4C(a0),$14(a3)
  330.     move.l    -$130(a5),a3
  331.     move.l    $68(a0),$18(a3)
  332.     move.l    $6C(a0),$1C(a3)
  333.     move.l    -$130(a5),a3
  334.     move.l    #$3FF00000,$28(a3)
  335.     clr.l    $2C(a3)
  336.     move.l    -$130(a5),a3
  337.     clr.l    $38(a3)
  338.     clr.l    $3C(a3)
  339.     move.l    -$130(a5),a3
  340.     clr.l    $30(a3)
  341.     clr.l    $34(a3)
  342.     move.l    -$130(a5),a3
  343.     clr.l    $20(a3)
  344.     clr.l    $24(a3)
  345.     move.l    $10(a0),(a2)
  346.     move.l    $14(a0),4(a2)
  347.     move.l    $30(a0),$8(a2)
  348.     move.l    $34(a0),$C(a2)
  349.     move.l    $50(a0),$10(a2)
  350.     move.l    $54(a0),$14(a2)
  351.     move.l    $70(a0),$18(a2)
  352.     move.l    $74(a0),$1C(a2)
  353.     move.l    #$3FF00000,$30(a2)
  354.     clr.l    $34(a2)
  355.     clr.l    $38(a2)
  356.     clr.l    $3C(a2)
  357.     clr.l    $28(a2)
  358.     clr.l    $2C(a2)
  359.     clr.l    $20(a2)
  360.     clr.l    $24(a2)
  361.     move.l    a4,a1
  362.     move.l    $18(a0),(a1)
  363.     move.l    $1C(a0),4(a1)
  364.     move.l    $38(a0),$8(a4)
  365.     move.l    $3C(a0),$C(a4)
  366.     move.l    $58(a0),$10(a4)
  367.     move.l    $5C(a0),$14(a4)
  368.     fmove.d    $78(a0),fp0
  369.     fmove.d    fp0,$18(a4)
  370.     move.l    #$3FF00000,$38(a4)
  371.     clr.l    $3C(a4)
  372.     clr.l    $30(a4)
  373.     clr.l    $34(a4)
  374.     clr.l    $28(a4)
  375.     clr.l    $2C(a4)
  376.     clr.l    $20(a4)
  377.     clr.l    $24(a4)
  378. ; if (fabs(r3[0])>fabs(r2[0])) SWAP_ROWS(r3, r2)
  379.     move.l    a4,a0
  380.     fmove.d    (a0),fp0
  381.     fmove.d    fp0,-(a7)
  382.     jsr    _fabs__r
  383.     fmove.x    fp0,fp2
  384.     addq.w    #$8,a7
  385.     move.l    4(a2),-(a7)
  386.     move.l    0(a2),-(a7)
  387.     jsr    _fabs__r
  388.     addq.w    #$8,a7
  389.     fcmp.x    fp0,fp2
  390.     fbole.b    L33
  391. L32
  392. ; if (fabs(r3[0])>fabs(
  393.     move.l    a4,a0
  394. ; if (fabs(r3[0])>fabs(
  395.     move.l    a2,a4
  396. ; if (fabs(r3[0])>fabs(
  397.     move.l    a0,a2
  398. L33
  399. ; if (fabs(r2[0])>fabs(r1[0])) SWAP_ROWS(r2, r1)
  400.     move.l    4(a2),-(a7)
  401.     move.l    0(a2),-(a7)
  402.     jsr    _fabs__r
  403.     fmove.x    fp0,fp2
  404.     addq.w    #$8,a7
  405.     move.l    -$130(a5),a0
  406.     fmove.d    (a0),fp0
  407.     fmove.d    fp0,-(a7)
  408.     jsr    _fabs__r
  409.     addq.w    #$8,a7
  410.     fcmp.x    fp0,fp2
  411.     fbole.b    L35
  412. L34
  413. ; if (fabs(r2[0])>fabs(
  414.     move.l    a2,a0
  415. ; if (fabs(r2[0])>fabs(
  416.     move.l    -$130(a5),a2
  417. ; if (fabs(r2[0])>fabs(
  418.     move.l    a0,-$130(a5)
  419. L35
  420. ; if (fabs(r1[0])>fabs(r0[0])) SWAP_ROWS(r1, r0)
  421.     move.l    -$130(a5),a0
  422.     fmove.d    (a0),fp0
  423.     fmove.d    fp0,-(a7)
  424.     jsr    _fabs__r
  425.     fmove.x    fp0,fp2
  426.     addq.w    #$8,a7
  427.     move.l    -$12C(a5),a0
  428.     fmove.d    (a0),fp0
  429.     fmove.d    fp0,-(a7)
  430.     jsr    _fabs__r
  431.     addq.w    #$8,a7
  432.     fcmp.x    fp0,fp2
  433.     fbole.b    L37
  434. L36
  435. ; if (fabs(r1[0])>fabs(
  436.     move.l    -$130(a5),a0
  437. ; if (fabs(r1[0])>fabs(
  438.     move.l    -$12C(a5),-$130(a5)
  439. ; if (fabs(r1[0])>fabs(
  440.     move.l    a0,-$12C(a5)
  441. L37
  442. ; if (0.0 == r0[0])  
  443.     move.l    -$12C(a5),a0
  444.     fmove.d    (a0),fp0
  445.     ftst.d    fp0
  446.     fbne.b    L39
  447. L38
  448.     moveq    #0,d0
  449.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  450.     movem.l    (a7)+,a2-a4
  451.     unlk    a5
  452.     rts
  453. L39
  454. ; m1 = r1[0]/r0[0];
  455.     move.l    -$130(a5),a0
  456.     fmove.d    (a0),fp3
  457.     move.l    -$12C(a5),a0
  458.     fmove.d    (a0),fp0
  459.     fdiv.x    fp0,fp3
  460. ; m2 = r2[0]/r0[0];
  461.     fmove.d    (a2),fp2
  462.     move.l    -$12C(a5),a0
  463.     fmove.d    (a0),fp0
  464.     fdiv.x    fp0,fp2
  465. ; m3 = r3[0]/r0[0];
  466.     move.l    a4,a0
  467.     fmove.d    (a0),fp1
  468.     move.l    -$12C(a5),a0
  469.     fmove.d    (a0),fp0
  470.     fdiv.x    fp0,fp1
  471. ; s = r0[1];
  472.     move.l    -$12C(a5),a1
  473.     fmove.d    $8(a1),fp0
  474. ; r1[1] -= m1 * s;
  475.     fmove.x    fp3,fp5
  476.     fmul.x    fp0,fp5
  477.     move.l    -$130(a5),a1
  478.     lea    $8(a1),a0
  479.     fmove.d    (a0),fp4
  480.     fsub.x    fp5,fp4
  481.     fmove.d    fp4,(a0)
  482. ; r2[1] -= m2 * s;
  483.     fmove.x    fp2,fp5
  484.     fmul.x    fp0,fp5
  485.     lea    $8(a2),a0
  486.     fmove.d    (a0),fp4
  487.     fsub.x    fp5,fp4
  488.     fmove.d    fp4,(a0)
  489. ; r3[1] -= m3 * s;
  490.     fmove.x    fp1,fp4
  491.     fmul.x    fp0,fp4
  492.     lea    $8(a4),a0
  493.     fmove.d    (a0),fp0
  494.     fsub.x    fp4,fp0
  495.     fmove.d    fp0,(a0)
  496. ; s = r0[2];
  497.     move.l    -$12C(a5),a1
  498.     fmove.d    $10(a1),fp0
  499. ; r1[2] -= m1 * s;
  500.     fmove.x    fp3,fp5
  501.     fmul.x    fp0,fp5
  502.     move.l    -$130(a5),a1
  503.     lea    $10(a1),a0
  504.     fmove.d    (a0),fp4
  505.     fsub.x    fp5,fp4
  506.     fmove.d    fp4,(a0)
  507. ; r2[2] -= m2 * s;
  508.     fmove.x    fp2,fp5
  509.     fmul.x    fp0,fp5
  510.     lea    $10(a2),a0
  511.     fmove.d    (a0),fp4
  512.     fsub.x    fp5,fp4
  513.     fmove.d    fp4,(a0)
  514. ; r3[2] -= m3 * s;
  515.     fmove.x    fp1,fp4
  516.     fmul.x    fp0,fp4
  517.     lea    $10(a4),a0
  518.     fmove.d    (a0),fp0
  519.     fsub.x    fp4,fp0
  520.     fmove.d    fp0,(a0)
  521. ; s = r0[3];
  522.     move.l    -$12C(a5),a1
  523.     fmove.d    $18(a1),fp0
  524. ; r1[3] -= m1 * s;
  525.     fmove.x    fp3,fp5
  526.     fmul.x    fp0,fp5
  527.     move.l    -$130(a5),a1
  528.     lea    $18(a1),a0
  529.     fmove.d    (a0),fp4
  530.     fsub.x    fp5,fp4
  531.     fmove.d    fp4,(a0)
  532. ; r2[3] -= m2 * s;
  533.     fmove.x    fp2,fp5
  534.     fmul.x    fp0,fp5
  535.     lea    $18(a2),a0
  536.     fmove.d    (a0),fp4
  537.     fsub.x    fp5,fp4
  538.     fmove.d    fp4,(a0)
  539. ; r3[3] -= m3 * s;
  540.     fmove.x    fp1,fp4
  541.     fmul.x    fp0,fp4
  542.     lea    $18(a4),a0
  543.     fmove.d    (a0),fp0
  544.     fsub.x    fp4,fp0
  545.     fmove.d    fp0,(a0)
  546. ; s = r0[4];
  547.     move.l    -$12C(a5),a1
  548.     fmove.d    $20(a1),fp0
  549. ; if (s != 0.0) 
  550.     ftst.d    fp0
  551.     fbeq.b    L41
  552. L40
  553. ; r1[4] -= m1 * s;
  554.     fmove.x    fp3,fp5
  555.     fmul.x    fp0,fp5
  556.     move.l    -$130(a5),a1
  557.     lea    $20(a1),a0
  558.     fmove.d    (a0),fp4
  559.     fsub.x    fp5,fp4
  560.     fmove.d    fp4,(a0)
  561. ; r2[4] -= m2 * s;
  562.     fmove.x    fp2,fp5
  563.     fmul.x    fp0,fp5
  564.     lea    $20(a2),a0
  565.     fmove.d    (a0),fp4
  566.     fsub.x    fp5,fp4
  567.     fmove.d    fp4,(a0)
  568. ; r3[4] -= m3 * s;
  569.     fmove.x    fp1,fp4
  570.     fmul.x    fp0,fp4
  571.     lea    $20(a4),a0
  572.     fmove.d    (a0),fp0
  573.     fsub.x    fp4,fp0
  574.     fmove.d    fp0,(a0)
  575. L41
  576. ; s = r0[5];
  577.     move.l    -$12C(a5),a1
  578.     fmove.d    $28(a1),fp0
  579. ; if (s != 0.0) 
  580.     ftst.d    fp0
  581.     fbeq.b    L43
  582. L42
  583. ; r1[5] -= m1 * s;
  584.     fmove.x    fp3,fp5
  585.     fmul.x    fp0,fp5
  586.     move.l    -$130(a5),a1
  587.     lea    $28(a1),a0
  588.     fmove.d    (a0),fp4
  589.     fsub.x    fp5,fp4
  590.     fmove.d    fp4,(a0)
  591. ; r2[5] -= m2 * s;
  592.     fmove.x    fp2,fp5
  593.     fmul.x    fp0,fp5
  594.     lea    $28(a2),a0
  595.     fmove.d    (a0),fp4
  596.     fsub.x    fp5,fp4
  597.     fmove.d    fp4,(a0)
  598. ; r3[5] -= m3 * s;
  599.     fmove.x    fp1,fp4
  600.     fmul.x    fp0,fp4
  601.     lea    $28(a4),a0
  602.     fmove.d    (a0),fp0
  603.     fsub.x    fp4,fp0
  604.     fmove.d    fp0,(a0)
  605. L43
  606. ; s = r0[6];
  607.     move.l    -$12C(a5),a1
  608.     fmove.d    $30(a1),fp0
  609. ; if (s != 0.0) 
  610.     ftst.d    fp0
  611.     fbeq.b    L45
  612. L44
  613. ; r1[6] -= m1 * s;
  614.     fmove.x    fp3,fp5
  615.     fmul.x    fp0,fp5
  616.     move.l    -$130(a5),a1
  617.     lea    $30(a1),a0
  618.     fmove.d    (a0),fp4
  619.     fsub.x    fp5,fp4
  620.     fmove.d    fp4,(a0)
  621. ; r2[6] -= m2 * s;
  622.     fmove.x    fp2,fp5
  623.     fmul.x    fp0,fp5
  624.     lea    $30(a2),a0
  625.     fmove.d    (a0),fp4
  626.     fsub.x    fp5,fp4
  627.     fmove.d    fp4,(a0)
  628. ; r3[6] -= m3 * s;
  629.     fmove.x    fp1,fp4
  630.     fmul.x    fp0,fp4
  631.     lea    $30(a4),a0
  632.     fmove.d    (a0),fp0
  633.     fsub.x    fp4,fp0
  634.     fmove.d    fp0,(a0)
  635. L45
  636. ; s = r0[7];
  637.     move.l    -$12C(a5),a1
  638.     fmove.d    $38(a1),fp0
  639. ; if (s != 0.0) 
  640.     ftst.d    fp0
  641.     fbeq.b    L47
  642. L46
  643. ; r1[7] -= m1 * s;
  644.     fmul.x    fp0,fp3
  645.     move.l    -$130(a5),a1
  646.     lea    $38(a1),a0
  647.     fmove.d    (a0),fp4
  648.     fsub.x    fp3,fp4
  649.     fmove.d    fp4,(a0)
  650. ; r2[7] -= m2 * s;
  651.     fmul.x    fp0,fp2
  652.     lea    $38(a2),a0
  653.     fmove.d    (a0),fp3
  654.     fsub.x    fp2,fp3
  655.     fmove.d    fp3,(a0)
  656. ; r3[7] -= m3 * s;
  657.     fmul.x    fp0,fp1
  658.     lea    $38(a4),a0
  659.     fmove.d    (a0),fp0
  660.     fsub.x    fp1,fp0
  661.     fmove.d    fp0,(a0)
  662. L47
  663. ; if (fabs(r3[1])>fabs(r2[1])) SWAP_ROWS(r3, r2)
  664.     move.l    $C(a4),-(a7)
  665.     move.l    $8(a4),-(a7)
  666.     jsr    _fabs__r
  667.     fmove.x    fp0,fp2
  668.     addq.w    #$8,a7
  669.     move.l    $C(a2),-(a7)
  670.     move.l    $8(a2),-(a7)
  671.     jsr    _fabs__r
  672.     addq.w    #$8,a7
  673.     fcmp.x    fp0,fp2
  674.     fbole.b    L49
  675. L48
  676. ; if (fabs(r3[1])>fabs(
  677.     move.l    a4,a0
  678. ; if (fabs(r3[1])>fabs(
  679.     move.l    a2,a4
  680. ; if (fabs(r3[1])>fabs(
  681.     move.l    a0,a2
  682. L49
  683. ; if (fabs(r2[1])>fabs(r1[1])) SWAP_ROWS(r2, r1)
  684.     move.l    $C(a2),-(a7)
  685.     move.l    $8(a2),-(a7)
  686.     jsr    _fabs__r
  687.     fmove.x    fp0,fp2
  688.     addq.w    #$8,a7
  689.     move.l    -$130(a5),a1
  690.     move.l    $C(a1),-(a7)
  691.     move.l    $8(a1),-(a7)
  692.     jsr    _fabs__r
  693.     addq.w    #$8,a7
  694.     fcmp.x    fp0,fp2
  695.     fbole.b    L51
  696. L50
  697. ; if (fabs(r2[1])>fabs(
  698.     move.l    a2,a0
  699. ; if (fabs(r2[1])>fabs(
  700.     move.l    -$130(a5),a2
  701. ; if (fabs(r2[1])>fabs(
  702.     move.l    a0,-$130(a5)
  703. L51
  704. ; if (0.0 == r1[1])  
  705.     move.l    -$130(a5),a1
  706.     ftst.d    $8(a1)
  707.     fbne.b    L53
  708. L52
  709.     moveq    #0,d0
  710.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  711.     movem.l    (a7)+,a2-a4
  712.     unlk    a5
  713.     rts
  714. L53
  715. ; m2 = r2[1]/r1[1];
  716.     move.l    -$130(a5),a1
  717.     fmove.d    $8(a2),fp2
  718.     fdiv.d    $8(a1),fp2
  719. ; m3 = r3[1]/r1[1];
  720.     move.l    -$130(a5),a1
  721.     fmove.d    $8(a4),fp1
  722.     fdiv.d    $8(a1),fp1
  723. ; r2[2] -= m2 * r1[2];
  724.     move.l    -$130(a5),a1
  725.     fmove.x    fp2,fp3
  726.     fmul.d    $10(a1),fp3
  727.     lea    $10(a2),a0
  728.     fmove.d    (a0),fp0
  729.     fsub.x    fp3,fp0
  730.     fmove.d    fp0,(a0)
  731. ; r3[2] -= m3 * r1[2];
  732.     move.l    -$130(a5),a1
  733.     fmove.x    fp1,fp3
  734.     fmul.d    $10(a1),fp3
  735.     lea    $10(a4),a0
  736.     fmove.d    (a0),fp0
  737.     fsub.x    fp3,fp0
  738.     fmove.d    fp0,(a0)
  739. ; r2[3] -= m2 * r1[3];
  740.     move.l    -$130(a5),a1
  741.     fmove.x    fp2,fp3
  742.     fmul.d    $18(a1),fp3
  743.     lea    $18(a2),a0
  744.     fmove.d    (a0),fp0
  745.     fsub.x    fp3,fp0
  746.     fmove.d    fp0,(a0)
  747. ; r3[3] -= m3 * r1[3];
  748.     move.l    -$130(a5),a1
  749.     fmove.x    fp1,fp3
  750.     fmul.d    $18(a1),fp3
  751.     lea    $18(a4),a0
  752.     fmove.d    (a0),fp0
  753.     fsub.x    fp3,fp0
  754.     fmove.d    fp0,(a0)
  755. ; s = r1[4];
  756.     move.l    -$130(a5),a1
  757.     fmove.d    $20(a1),fp0
  758. ; if (0.0 != s) 
  759.     ftst.d    fp0
  760.     fbeq.b    L55
  761. L54
  762. ; r2[4] -= m2 * s;
  763.     fmove.x    fp2,fp4
  764.     fmul.x    fp0,fp4
  765.     lea    $20(a2),a0
  766.     fmove.d    (a0),fp3
  767.     fsub.x    fp4,fp3
  768.     fmove.d    fp3,(a0)
  769. ; r3[4] -= m3 * s;
  770.     fmove.x    fp1,fp3
  771.     fmul.x    fp0,fp3
  772.     lea    $20(a4),a0
  773.     fmove.d    (a0),fp0
  774.     fsub.x    fp3,fp0
  775.     fmove.d    fp0,(a0)
  776. L55
  777. ; s = r1[5];
  778.     move.l    -$130(a5),a1
  779.     fmove.d    $28(a1),fp0
  780. ; if (0.0 != s) 
  781.     ftst.d    fp0
  782.     fbeq.b    L57
  783. L56
  784. ; r2[5] -= m2 * s;
  785.     fmove.x    fp2,fp4
  786.     fmul.x    fp0,fp4
  787.     lea    $28(a2),a0
  788.     fmove.d    (a0),fp3
  789.     fsub.x    fp4,fp3
  790.     fmove.d    fp3,(a0)
  791. ; r3[5] -= m3 * s;
  792.     fmove.x    fp1,fp3
  793.     fmul.x    fp0,fp3
  794.     lea    $28(a4),a0
  795.     fmove.d    (a0),fp0
  796.     fsub.x    fp3,fp0
  797.     fmove.d    fp0,(a0)
  798. L57
  799. ; s = r1[6];
  800.     move.l    -$130(a5),a1
  801.     fmove.d    $30(a1),fp0
  802. ; if (0.0 != s) 
  803.     ftst.d    fp0
  804.     fbeq.b    L59
  805. L58
  806. ; r2[6] -= m2 * s;
  807.     fmove.x    fp2,fp4
  808.     fmul.x    fp0,fp4
  809.     lea    $30(a2),a0
  810.     fmove.d    (a0),fp3
  811.     fsub.x    fp4,fp3
  812.     fmove.d    fp3,(a0)
  813. ; r3[6] -= m3 * s;
  814.     fmove.x    fp1,fp3
  815.     fmul.x    fp0,fp3
  816.     lea    $30(a4),a0
  817.     fmove.d    (a0),fp0
  818.     fsub.x    fp3,fp0
  819.     fmove.d    fp0,(a0)
  820. L59
  821. ; s = r1[7];
  822.     move.l    -$130(a5),a1
  823.     fmove.d    $38(a1),fp0
  824. ; if (0.0 != s) 
  825.     ftst.d    fp0
  826.     fbeq.b    L61
  827. L60
  828. ; r2[7] -= m2 * s;
  829.     fmul.x    fp0,fp2
  830.     lea    $38(a2),a0
  831.     fmove.d    (a0),fp3
  832.     fsub.x    fp2,fp3
  833.     fmove.d    fp3,(a0)
  834. ; r3[7] -= m3 * s;
  835.     fmul.x    fp0,fp1
  836.     lea    $38(a4),a0
  837.     fmove.d    (a0),fp0
  838.     fsub.x    fp1,fp0
  839.     fmove.d    fp0,(a0)
  840. L61
  841. ; if (fabs(r3[2])>fabs(r2[2])) SWAP_ROWS(r3, r2)
  842.     move.l    $14(a4),-(a7)
  843.     move.l    $10(a4),-(a7)
  844.     jsr    _fabs__r
  845.     fmove.x    fp0,fp2
  846.     addq.w    #$8,a7
  847.     move.l    $14(a2),-(a7)
  848.     move.l    $10(a2),-(a7)
  849.     jsr    _fabs__r
  850.     addq.w    #$8,a7
  851.     fcmp.x    fp0,fp2
  852.     fbole.b    L63
  853. L62
  854. ; if (fabs(r3[2])>fabs(
  855.     move.l    a4,a0
  856. ; if (fabs(r3[2])>fabs(
  857.     move.l    a2,a4
  858. ; if (fabs(r3[2])>fabs(
  859.     move.l    a0,a2
  860. L63
  861. ; if (0.0 == r2[2])  
  862.     ftst.d    $10(a2)
  863.     fbne.b    L65
  864. L64
  865.     moveq    #0,d0
  866.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  867.     movem.l    (a7)+,a2-a4
  868.     unlk    a5
  869.     rts
  870. L65
  871. ; m3 = r3[2]/r2[2];
  872.     fmove.d    $10(a4),fp1
  873.     fdiv.d    $10(a2),fp1
  874. ; r3[3] -= m3 * r2[3], r3[4] -= m3 * r2[4],
  875.     fmove.x    fp1,fp2
  876.     fmul.d    $18(a2),fp2
  877.     lea    $18(a4),a0
  878.     fmove.d    (a0),fp0
  879.     fsub.x    fp2,fp0
  880.     fmove.d    fp0,(a0)
  881.     fmove.x    fp1,fp2
  882.     fmul.d    $20(a2),fp2
  883.     lea    $20(a4),a0
  884.     fmove.d    (a0),fp0
  885.     fsub.x    fp2,fp0
  886.     fmove.d    fp0,(a0)
  887.     fmove.x    fp1,fp2
  888.     fmul.d    $28(a2),fp2
  889.     lea    $28(a4),a0
  890.     fmove.d    (a0),fp0
  891.     fsub.x    fp2,fp0
  892.     fmove.d    fp0,(a0)
  893.     fmove.x    fp1,fp2
  894.     fmul.d    $30(a2),fp2
  895.     lea    $30(a4),a0
  896.     fmove.d    (a0),fp0
  897.     fsub.x    fp2,fp0
  898.     fmove.d    fp0,(a0)
  899.     fmul.d    $38(a2),fp1
  900.     lea    $38(a4),a0
  901.     fmove.d    (a0),fp0
  902.     fsub.x    fp1,fp0
  903.     fmove.d    fp0,(a0)
  904. ; if (0.0 == r3[3]) 
  905.     ftst.d    $18(a4)
  906.     fbne.b    L67
  907. L66
  908.     moveq    #0,d0
  909.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  910.     movem.l    (a7)+,a2-a4
  911.     unlk    a5
  912.     rts
  913. L67
  914. ; s = 1.0/r3[3];
  915.     fmove.d    #$.3FF00000.00000000,fp0
  916.     fdiv.d    $18(a4),fp0
  917. ; r3[4] *= s;
  918.     lea    $20(a4),a0
  919.     fmove.d    (a0),fp1
  920.     fmul.x    fp0,fp1
  921.     fmove.d    fp1,(a0)
  922. ; r3[5] *= s;
  923.     lea    $28(a4),a0
  924.     fmove.d    (a0),fp1
  925.     fmul.x    fp0,fp1
  926.     fmove.d    fp1,(a0)
  927. ; r3[6] *= s;
  928.     lea    $30(a4),a0
  929.     fmove.d    (a0),fp1
  930.     fmul.x    fp0,fp1
  931.     fmove.d    fp1,(a0)
  932. ; r3[7] *= s;
  933.     lea    $38(a4),a0
  934.     fmove.d    (a0),fp1
  935.     fmul.x    fp0,fp1
  936.     fmove.d    fp1,(a0)
  937. ; m2 = r2[3];
  938.     fmove.d    $18(a2),fp2
  939. ; s  = 1.0/r2[2];
  940.     fmove.d    #$.3FF00000.00000000,fp0
  941.     fdiv.d    $10(a2),fp0
  942. ; r2[4] = s * (r2[4] - r3[4] * m2), r2[5] = s * (r2[5] - r3[5] * m2)
  943.     fmove.d    $20(a4),fp3
  944.     fmul.x    fp2,fp3
  945.     fmove.d    $20(a2),fp1
  946.     fsub.x    fp3,fp1
  947.     fmul.x    fp0,fp1
  948.     fmove.d    fp1,$20(a2)
  949.     fmove.d    $28(a4),fp3
  950.     fmul.x    fp2,fp3
  951.     fmove.d    $28(a2),fp1
  952.     fsub.x    fp3,fp1
  953.     fmul.x    fp0,fp1
  954.     fmove.d    fp1,$28(a2)
  955.     fmove.d    $30(a4),fp3
  956.     fmul.x    fp2,fp3
  957.     fmove.d    $30(a2),fp1
  958.     fsub.x    fp3,fp1
  959.     fmul.x    fp0,fp1
  960.     fmove.d    fp1,$30(a2)
  961.     fmove.d    $38(a4),fp3
  962.     fmul.x    fp2,fp3
  963.     fmove.d    $38(a2),fp1
  964.     fsub.x    fp3,fp1
  965.     fmul.x    fp1,fp0
  966.     fmove.d    fp0,$38(a2)
  967. ; m1 = r1[3];
  968.     move.l    -$130(a5),a1
  969.     fmove.d    $18(a1),fp3
  970. ; r1[4] -= r3[4] * m1, r1[5] -= r3[5] * m1,
  971.     fmove.d    $20(a4),fp1
  972.     fmul.x    fp3,fp1
  973.     move.l    -$130(a5),a1
  974.     lea    $20(a1),a0
  975.     fmove.d    (a0),fp0
  976.     fsub.x    fp1,fp0
  977.     fmove.d    fp0,(a0)
  978.     fmove.d    $28(a4),fp1
  979.     fmul.x    fp3,fp1
  980.     move.l    -$130(a5),a1
  981.     lea    $28(a1),a0
  982.     fmove.d    (a0),fp0
  983.     fsub.x    fp1,fp0
  984.     fmove.d    fp0,(a0)
  985.     fmove.d    $30(a4),fp1
  986.     fmul.x    fp3,fp1
  987.     move.l    -$130(a5),a1
  988.     lea    $30(a1),a0
  989.     fmove.d    (a0),fp0
  990.     fsub.x    fp1,fp0
  991.     fmove.d    fp0,(a0)
  992.     fmove.d    $38(a4),fp1
  993.     fmul.x    fp3,fp1
  994.     move.l    -$130(a5),a1
  995.     lea    $38(a1),a0
  996.     fmove.d    (a0),fp0
  997.     fsub.x    fp1,fp0
  998.     fmove.d    fp0,(a0)
  999. ; m0 = r0[3];
  1000.     move.l    -$12C(a5),a1
  1001.     fmove.d    $18(a1),fp1
  1002. ; r0[4] -= r3[4] * m0, r0[5] -= r3[5] * m0,
  1003.     fmove.d    $20(a4),fp2
  1004.     fmul.x    fp1,fp2
  1005.     move.l    -$12C(a5),a1
  1006.     lea    $20(a1),a0
  1007.     fmove.d    (a0),fp0
  1008.     fsub.x    fp2,fp0
  1009.     fmove.d    fp0,(a0)
  1010.     fmove.d    $28(a4),fp2
  1011.     fmul.x    fp1,fp2
  1012.     move.l    -$12C(a5),a1
  1013.     lea    $28(a1),a0
  1014.     fmove.d    (a0),fp0
  1015.     fsub.x    fp2,fp0
  1016.     fmove.d    fp0,(a0)
  1017.     fmove.d    $30(a4),fp2
  1018.     fmul.x    fp1,fp2
  1019.     move.l    -$12C(a5),a1
  1020.     lea    $30(a1),a0
  1021.     fmove.d    (a0),fp0
  1022.     fsub.x    fp2,fp0
  1023.     fmove.d    fp0,(a0)
  1024.     fmove.d    $38(a4),fp2
  1025.     fmul.x    fp1,fp2
  1026.     move.l    -$12C(a5),a1
  1027.     lea    $38(a1),a0
  1028.     fmove.d    (a0),fp0
  1029.     fsub.x    fp2,fp0
  1030.     fmove.d    fp0,(a0)
  1031. ; m1 = r1[2];
  1032.     move.l    -$130(a5),a1
  1033.     fmove.d    $10(a1),fp3
  1034. ; s  = 1.0/r1[1];
  1035.     move.l    -$130(a5),a1
  1036.     fmove.d    #$.3FF00000.00000000,fp0
  1037.     fdiv.d    $8(a1),fp0
  1038. ; r1[4] = s * (r1[4] - r2[4] * m1), r1[5] = s * (r1[5] - r2[5] * m1)
  1039.     move.l    -$130(a5),a1
  1040.     fmove.d    $20(a2),fp2
  1041.     fmul.x    fp3,fp2
  1042.     fmove.d    $20(a1),fp1
  1043.     fsub.x    fp2,fp1
  1044.     fmul.x    fp0,fp1
  1045.     move.l    -$130(a5),a1
  1046.     fmove.d    fp1,$20(a1)
  1047.     move.l    -$130(a5),a1
  1048.     fmove.d    $28(a2),fp2
  1049.     fmul.x    fp3,fp2
  1050.     fmove.d    $28(a1),fp1
  1051.     fsub.x    fp2,fp1
  1052.     fmul.x    fp0,fp1
  1053.     move.l    -$130(a5),a1
  1054.     fmove.d    fp1,$28(a1)
  1055.     move.l    -$130(a5),a1
  1056.     fmove.d    $30(a2),fp2
  1057.     fmul.x    fp3,fp2
  1058.     fmove.d    $30(a1),fp1
  1059.     fsub.x    fp2,fp1
  1060.     fmul.x    fp0,fp1
  1061.     move.l    -$130(a5),a1
  1062.     fmove.d    fp1,$30(a1)
  1063.     move.l    -$130(a5),a1
  1064.     fmove.d    $38(a2),fp2
  1065.     fmul.x    fp3,fp2
  1066.     fmove.d    $38(a1),fp1
  1067.     fsub.x    fp2,fp1
  1068.     fmul.x    fp1,fp0
  1069.     move.l    -$130(a5),a1
  1070.     fmove.d    fp0,$38(a1)
  1071. ; m0 = r0[2];
  1072.     move.l    -$12C(a5),a1
  1073.     fmove.d    $10(a1),fp1
  1074. ; r0[4] -= r2[4] * m0, r0[5] -= r2[5] * m0,
  1075.     fmove.d    $20(a2),fp2
  1076.     fmul.x    fp1,fp2
  1077.     move.l    -$12C(a5),a1
  1078.     lea    $20(a1),a0
  1079.     fmove.d    (a0),fp0
  1080.     fsub.x    fp2,fp0
  1081.     fmove.d    fp0,(a0)
  1082.     fmove.d    $28(a2),fp2
  1083.     fmul.x    fp1,fp2
  1084.     move.l    -$12C(a5),a1
  1085.     lea    $28(a1),a0
  1086.     fmove.d    (a0),fp0
  1087.     fsub.x    fp2,fp0
  1088.     fmove.d    fp0,(a0)
  1089.     fmove.d    $30(a2),fp2
  1090.     fmul.x    fp1,fp2
  1091.     move.l    -$12C(a5),a1
  1092.     lea    $30(a1),a0
  1093.     fmove.d    (a0),fp0
  1094.     fsub.x    fp2,fp0
  1095.     fmove.d    fp0,(a0)
  1096.     fmove.d    $38(a2),fp2
  1097.     fmul.x    fp1,fp2
  1098.     move.l    -$12C(a5),a1
  1099.     lea    $38(a1),a0
  1100.     fmove.d    (a0),fp0
  1101.     fsub.x    fp2,fp0
  1102.     fmove.d    fp0,(a0)
  1103. ; m0 = r0[1];
  1104.     move.l    -$12C(a5),a1
  1105.     fmove.d    $8(a1),fp1
  1106. ; s  = 1.0/r0[0];
  1107.     move.l    -$12C(a5),a0
  1108.     fmove.d    (a0),fp0
  1109.     fmove.d    #$.3FF00000.00000000,fp2
  1110.     fdiv.x    fp0,fp2
  1111.     fmove.x    fp2,fp0
  1112. ; r0[4] = s * (r0[4] - r1[4] * m0), r0[5] = s * (r0[5] - r1[5] * m0)
  1113.     move.l    -$12C(a5),a1
  1114.     fmove.d    $20(a1),fp2
  1115.     move.l    -$130(a5),a1
  1116.     fmove.d    $20(a1),fp3
  1117.     fmul.x    fp1,fp3
  1118.     fsub.x    fp3,fp2
  1119.     fmul.x    fp0,fp2
  1120.     move.l    -$12C(a5),a1
  1121.     fmove.d    fp2,$20(a1)
  1122.     move.l    -$12C(a5),a1
  1123.     fmove.d    $28(a1),fp2
  1124.     move.l    -$130(a5),a1
  1125.     fmove.d    $28(a1),fp3
  1126.     fmul.x    fp1,fp3
  1127.     fsub.x    fp3,fp2
  1128.     fmul.x    fp0,fp2
  1129.     move.l    -$12C(a5),a1
  1130.     fmove.d    fp2,$28(a1)
  1131.     move.l    -$12C(a5),a1
  1132.     fmove.d    $30(a1),fp2
  1133.     move.l    -$130(a5),a1
  1134.     fmove.d    $30(a1),fp3
  1135.     fmul.x    fp1,fp3
  1136.     fsub.x    fp3,fp2
  1137.     fmul.x    fp0,fp2
  1138.     move.l    -$12C(a5),a1
  1139.     fmove.d    fp2,$30(a1)
  1140.     move.l    -$12C(a5),a1
  1141.     fmove.d    $38(a1),fp2
  1142.     move.l    -$130(a5),a1
  1143.     fmove.d    $38(a1),fp3
  1144.     fmul.x    fp1,fp3
  1145.     fsub.x    fp3,fp2
  1146.     fmul.x    fp2,fp0
  1147.     move.l    -$12C(a5),a1
  1148.     fmove.d    fp0,$38(a1)
  1149. ; MAT(out,0,0) = r0[4];
  1150.     move.l    -$12C(a5),a1
  1151.     move.l    $C(a5),a0
  1152.     move.l    $20(a1),(a0)
  1153.     move.l    $24(a1),4(a0)
  1154. ; MAT(out,0,1) = r0[5],
  1155.     move.l    -$12C(a5),a1
  1156.     fmove.d    $28(a1),fp0
  1157.     move.l    $C(a5),a1
  1158.     fmove.d    fp0,$20(a1)
  1159.     move.l    -$12C(a5),a1
  1160.     fmove.d    $30(a1),fp0
  1161.     move.l    $C(a5),a1
  1162.     fmove.d    fp0,$40(a1)
  1163. ; MAT(out,0,3) = r0[7],
  1164.     move.l    -$12C(a5),a1
  1165.     fmove.d    $38(a1),fp0
  1166.     move.l    $C(a5),a1
  1167.     fmove.d    fp0,$60(a1)
  1168.     move.l    -$130(a5),a1
  1169.     fmove.d    $20(a1),fp0
  1170.     move.l    $C(a5),a1
  1171.     fmove.d    fp0,$8(a1)
  1172. ; MAT(out,1,1) = r1[5],
  1173.     move.l    -$130(a5),a1
  1174.     fmove.d    $28(a1),fp0
  1175.     move.l    $C(a5),a1
  1176.     fmove.d    fp0,$28(a1)
  1177.     move.l    -$130(a5),a1
  1178.     fmove.d    $30(a1),fp0
  1179.     move.l    $C(a5),a1
  1180.     fmove.d    fp0,$48(a1)
  1181. ; MAT(out,1,3) = r1[7],
  1182.     move.l    -$130(a5),a1
  1183.     fmove.d    $38(a1),fp0
  1184.     move.l    $C(a5),a1
  1185.     fmove.d    fp0,$68(a1)
  1186.     move.l    $C(a5),a1
  1187.     move.l    $20(a2),$10(a1)
  1188.     move.l    $24(a2),$14(a1)
  1189. ; MAT(out,2,1) = r2[5],
  1190.     move.l    $C(a5),a1
  1191.     move.l    $28(a2),$30(a1)
  1192.     move.l    $2C(a2),$34(a1)
  1193.     move.l    $C(a5),a1
  1194.     move.l    $30(a2),$50(a1)
  1195.     move.l    $34(a2),$54(a1)
  1196. ; MAT(out,2,3) = r2[7],
  1197.     move.l    $C(a5),a1
  1198.     move.l    $38(a2),$70(a1)
  1199.     move.l    $3C(a2),$74(a1)
  1200.     move.l    $C(a5),a1
  1201.     move.l    $20(a4),$18(a1)
  1202.     move.l    $24(a4),$1C(a1)
  1203. ; MAT(out,3,1) = r3[5],
  1204.     move.l    $C(a5),a1
  1205.     move.l    $28(a4),$38(a1)
  1206.     move.l    $2C(a4),$3C(a1)
  1207.     move.l    $C(a5),a1
  1208.     move.l    $30(a4),$58(a1)
  1209.     move.l    $34(a4),$5C(a1)
  1210. ; MAT(out,3,3) = r3[7];
  1211.     move.l    $C(a5),a1
  1212.     move.l    $38(a4),$78(a1)
  1213.     move.l    $3C(a4),$7C(a1)
  1214.     moveq    #1,d0
  1215.     fmovem.x (a7)+,fp2/fp3/fp4/fp5
  1216.     movem.l    (a7)+,a2-a4
  1217.     unlk    a5
  1218.     rts
  1219.  
  1220.     SECTION "_gluProject:0",CODE
  1221.  
  1222.  
  1223. ;GLint APIENTRY gluProject(GLdouble objx,GLdouble objy,GLdouble objz,
  1224.     XDEF    _gluProject
  1225. _gluProject
  1226. L72    EQU    -$40
  1227.     link    a5,#L72
  1228.     movem.l    a2-a4,-(a7)
  1229.     fmovem.x fp2,-(a7)
  1230.     move.l    $20(a5),a1
  1231.     move.l    $28(a5),a2
  1232.     move.l    $34(a5),a3
  1233.     move.l    $30(a5),a4
  1234.     fmove.d    $18(a5),fp0
  1235.     fmove.d    $10(a5),fp1
  1236.     fmove.d    $8(a5),fp2
  1237. L69
  1238. ;    in[0]=objx;
  1239.     fmove.d    fp2,-$20(a5)
  1240. ; in[1]=objy;
  1241.     lea    -$20(a5),a0
  1242.     fmove.d    fp1,$8(a0)
  1243. ; in[2]=objz;
  1244.     lea    -$20(a5),a0
  1245.     fmove.d    fp0,$10(a0)
  1246. ; in[3]=1.0;
  1247.     lea    -$20(a5),a0
  1248.     move.l    #$3FF00000,$18(a0)
  1249.     clr.l    $1C(a0)
  1250. ;    transform_point(out,model,in);
  1251.     pea    -$20(a5)
  1252.     move.l    a1,-(a7)
  1253.     pea    -$40(a5)
  1254.     jsr    _transform_point
  1255.     add.w    #$C,a7
  1256. ;    transform_point(in,proj,out);
  1257.     pea    -$40(a5)
  1258.     move.l    $24(a5),-(a7)
  1259.     pea    -$20(a5)
  1260.     jsr    _transform_point
  1261.     add.w    #$C,a7
  1262. ;    if (in[3]==0.0)
  1263.     lea    -$20(a5),a0
  1264.     ftst.d    $18(a0)
  1265.     fbne.b    L71
  1266. L70
  1267.     moveq    #0,d0
  1268.     fmovem.x (a7)+,fp2
  1269.     movem.l    (a7)+,a2-a4
  1270.     unlk    a5
  1271.     rts
  1272. L71
  1273. ;    in[0]/=in[3];
  1274.     lea    -$20(a5),a0
  1275.     fmove.d    $18(a0),fp1
  1276.     lea    -$20(a5),a0
  1277.     fmove.d    (a0),fp0
  1278.     fdiv.x    fp1,fp0
  1279.     fmove.d    fp0,(a0)
  1280. ; in[1]/=in[3];
  1281.     lea    -$20(a5),a0
  1282.     fmove.d    $18(a0),fp1
  1283.     lea    -$20(a5),a0
  1284.     addq.w    #$8,a0
  1285.     fmove.d    (a0),fp0
  1286.     fdiv.x    fp1,fp0
  1287.     fmove.d    fp0,(a0)
  1288. ; in[2]/=in[3];
  1289.     lea    -$20(a5),a0
  1290.     fmove.d    $18(a0),fp1
  1291.     lea    -$20(a5),a0
  1292.     add.w    #$10,a0
  1293.     fmove.d    (a0),fp0
  1294.     fdiv.x    fp1,fp0
  1295.     fmove.d    fp0,(a0)
  1296. ;    *winx = viewport[0]+(1+in[0])*viewport[2]/2;
  1297.     fmove.l    (a2),fp1
  1298.     fmove.d    -$20(a5),fp0
  1299.     fadd.d    #$.3FF00000.00000000,fp0
  1300.     fmove.l    $8(a2),fp2
  1301.     fmul.x    fp2,fp0
  1302.     fdiv.d    #$.40000000.00000000,fp0
  1303.     fadd.x    fp0,fp1
  1304.     move.l    $2C(a5),a0
  1305.     fmove.d    fp1,(a0)
  1306. ;    *winy = viewport[1]+(1+in[1])*viewport[3]/2;
  1307.     fmove.l    4(a2),fp1
  1308.     lea    -$20(a5),a0
  1309.     fmove.d    $8(a0),fp0
  1310.     fadd.d    #$.3FF00000.00000000,fp0
  1311.     fmove.l    $C(a2),fp2
  1312.     fmul.x    fp2,fp0
  1313.     fdiv.d    #$.40000000.00000000,fp0
  1314.     fadd.x    fp0,fp1
  1315.     move.l    a4,a0
  1316.     fmove.d    fp1,(a0)
  1317. ;    *winz = (1+in[2])/2;
  1318.     lea    -$20(a5),a0
  1319.     fmove.d    $10(a0),fp0
  1320.     fadd.d    #$.3FF00000.00000000,fp0
  1321.     fdiv.d    #$.40000000.00000000,fp0
  1322.     move.l    a3,a0
  1323.     fmove.d    fp0,(a0)
  1324.     moveq    #1,d0
  1325.     fmovem.x (a7)+,fp2
  1326.     movem.l    (a7)+,a2-a4
  1327.     unlk    a5
  1328.     rts
  1329.  
  1330.     SECTION "_gluUnProject:0",CODE
  1331.  
  1332.  
  1333. ;GLint APIENTRY gluUnProject(GLdouble winx,GLdouble winy,GLdouble win
  1334.     XDEF    _gluUnProject
  1335. _gluUnProject
  1336. L76    EQU    -$140
  1337.     link    a5,#L76
  1338.     movem.l    a2-a4,-(a7)
  1339.     fmovem.x fp2/fp3,-(a7)
  1340.     movem.l    $28(a5),a0/a4
  1341.     move.l    $34(a5),a2
  1342.     move.l    $30(a5),a3
  1343.     fmove.d    $10(a5),fp0
  1344.     fmove.d    $8(a5),fp1
  1345.     fmove.d    $18(a5),fp3
  1346. L73
  1347. ;    in[0]=(winx-viewport[0])*2/viewport[2] - 1.0;
  1348.     fmove.l    (a0),fp2
  1349.     fsub.x    fp2,fp1
  1350.     fmul.d    #$.40000000.00000000,fp1
  1351.     fmove.l    $8(a0),fp2
  1352.     fdiv.x    fp2,fp1
  1353.     fsub.d    #$.3FF00000.00000000,fp1
  1354.     fmove.d    fp1,-$120(a5)
  1355. ;    in[1]=(winy-viewport[1])*2/viewport[3] - 1.0;
  1356.     fmove.l    4(a0),fp1
  1357.     fsub.x    fp1,fp0
  1358.     fmul.d    #$.40000000.00000000,fp0
  1359.     fmove.l    $C(a0),fp1
  1360.     fdiv.x    fp1,fp0
  1361.     fsub.d    #$.3FF00000.00000000,fp0
  1362.     lea    -$120(a5),a0
  1363.     fmove.d    fp0,$8(a0)
  1364. ;    in[2]=2*winz - 1.0;
  1365.     fmove.x    fp3,fp0
  1366.     fmul.d    #$.40000000.00000000,fp0
  1367.     fsub.d    #$.3FF00000.00000000,fp0
  1368.     lea    -$120(a5),a0
  1369.     fmove.d    fp0,$10(a0)
  1370. ;    in[3]=1.0;
  1371.     lea    -$120(a5),a0
  1372.     move.l    #$3FF00000,$18(a0)
  1373.     clr.l    $1C(a0)
  1374. ;    matmul(A,proj,model);
  1375.     move.l    $20(a5),-(a7)
  1376.     move.l    $24(a5),-(a7)
  1377.     pea    -$100(a5)
  1378.     jsr    _matmul
  1379.     add.w    #$C,a7
  1380. ;    invert_matrix(A,m);
  1381.     pea    -$80(a5)
  1382.     pea    -$100(a5)
  1383.     jsr    _invert_matrix
  1384.     addq.w    #$8,a7
  1385. ;    transform_point(out,m,in);
  1386.     pea    -$120(a5)
  1387.     pea    -$80(a5)
  1388.     pea    -$140(a5)
  1389.     jsr    _transform_point
  1390.     add.w    #$C,a7
  1391. ;    if (out[3]==0.0)
  1392.     lea    -$140(a5),a0
  1393.     ftst.d    $18(a0)
  1394.     fbne.b    L75
  1395. L74
  1396.     moveq    #0,d0
  1397.     fmovem.x (a7)+,fp2/fp3
  1398.     movem.l    (a7)+,a2-a4
  1399.     unlk    a5
  1400.     rts
  1401. L75
  1402. ;    *objx=out[0]/out[3];
  1403.     lea    -$140(a5),a0
  1404.     fmove.d    -$140(a5),fp0
  1405.     fdiv.d    $18(a0),fp0
  1406.     move.l    a4,a0
  1407.     fmove.d    fp0,(a0)
  1408. ;    *objy=out[1]/out[3];
  1409.     lea    -$140(a5),a0
  1410.     fmove.d    $8(a0),fp0
  1411.     lea    -$140(a5),a0
  1412.     fdiv.d    $18(a0),fp0
  1413.     move.l    a3,a0
  1414.     fmove.d    fp0,(a0)
  1415. ;    *objz=out[2]/out[3];
  1416.     lea    -$140(a5),a0
  1417.     fmove.d    $10(a0),fp0
  1418.     lea    -$140(a5),a0
  1419.     fdiv.d    $18(a0),fp0
  1420.     fmove.d    fp0,(a2)
  1421.     moveq    #1,d0
  1422.     fmovem.x (a7)+,fp2/fp3
  1423.     movem.l    (a7)+,a2-a4
  1424.     unlk    a5
  1425.     rts
  1426.  
  1427.     END
  1428.